/*
 * This file is part of Annuaire.
 *
 * Annuaire is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Annuaire is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Annuaire.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.miage.annuaire.data;

import java.util.LinkedList;
import java.util.List;

import org.miage.annuaire.Membre;
import org.miage.annuaire.Structure;

/**
 * Mock de la classe ObjectDataAccess.
 * @author guhumber
 */
public class ObjectDataAccessMock implements ObjectDataAccess {

	/**
	 * Renvoie une structure avec des filles.
	 */
	@Override
	public List<Structure> getAllStructures() {
		
		List<Structure> structures = new LinkedList<Structure>();
		
		Structure structure1 = createStructure(1, true, true, 2, 2);
		Structure structure1_1 = createStructure(2, false, false, 0, 0);
		Structure structure1_2 = createStructure(3, false, false, 0, 0);
		Structure structure1_1_1 = createStructure(4, true, true, 2, 2);
		
		structures.add(structure1);
		structure1.addChild(structure1_1);
		structure1.addChild(structure1_2);
		structure1_1.addChild(structure1_1_1);
		
		return structures;
	}

	@Override
	public List<Structure> getCompleteStructures() {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * Renvoie une structure par sa clef.
	 */
	@Override
	public Structure getStructureByKey(String key) {
		
		int nb = 0;
		
		try {
			nb = Integer.parseInt(key);
		} catch (NumberFormatException e) {
			// Rien.
		}
		
		return createStructure(nb, true, true, 2, 2);
	}

	@Override
	public List<Membre> getMembresByName(String name) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Membre> getMembresByFunction(String function) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Membre> getMembresByStructure(String structure) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * Crée une structure numérotée.
	 * @param structureNb Le numéro de la structure à créer.
	 * @param hasLeader La structure a-t-elle un leader?
	 * @param hasContact La structure a-t-elle un contact?
	 * @param assistantsNb Le nombre d'assistants leader dans la structure.
	 * @param membresNb Le nombre de membres dans la structure.
	 * @return Une structure numérotée.
	 */
	public static Structure createStructure(int structureNb, boolean hasLeader,
			boolean hasContact, int assistantsNb, int membresNb)  {
		
		Structure structure = new Structure();
		structure.setKey("s" + structureNb);
		structure.setShortName("struct" + structureNb);
		structure.setShortName("structure" + structureNb);
		// TODO: factoriser
		if (hasLeader) {
			Membre leader = new Membre();
			leader.setKey("leader" + structureNb);
			leader.setName("leader-name" + structureNb);
			leader.setOffice("leader-office" + structureNb);
			leader.setFunction("leader-function" + structureNb);
			leader.setTitre("leader-title" + structureNb);
			leader.setLeader(true);
			structure.addMembre(leader);
		}
		
		if (hasContact) {
			Membre contact = new Membre();
			contact.setKey("contact" + structureNb);
			contact.setName("contact-name" + structureNb);
			contact.setOffice("contact-office" + structureNb);
			contact.setFunction("contact-function" + structureNb);
			contact.setContact(true);
			structure.addMembre(contact);
		}
		
		for (int i = 0; i < assistantsNb; i++) {
			Membre assistant = new Membre();
			assistant.setKey("assistant-leader" + i);
			assistant.setName("assistant-name" + i);
			assistant.setOffice("assistant-office" + i);
			assistant.setFunction("assistant-function" + i);
			assistant.setTitre("assistant-title" + i);
			assistant.setAssistantLeader(true);
			structure.addMembre(assistant);
		}
		
		for (int i = 0; i < membresNb; i++) {
			Membre membre = new Membre();
			membre.setKey("membre" + i);
			membre.setName("membre-name" + i);
			membre.setOffice("membre-office" + i);
			membre.setFunction("membre-function" + i);
			structure.addMembre(membre);
		}
		
		return structure;
	}

    @Override
    public List<Membre> getMembresByNameWithFonction(String name, List<Membre> LaList) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

	@Override
	public List<Membre> getMembres(String name, String function,
			String structure) {
		// TODO Auto-generated method stub
		return null;
	}
	
}
